harp version 0.3

Andrew Singleton

General improvements

  • Major overhaul (refactor / rewrite) of verification functions
  • Verification for quantile thresholds
  • More memory efficient, possibly faster
  • More feedback on what’s happening
  • Can compute new scores without having to edit internal code
  • New “do (nearly) everything” functionalities

Running a verification job

In an R session

  • run_point_verif()
run_point_verif(
  dttm       = seq_dttm(20251010, 20251020, "3h"),
  fcst_model = c("MEPS", "IFSENS"),
  param_defs = make_verif_param("S10m", verif_thresholds = seq(2.5, 10, 2.5)),
  fcst_path  = "/data/harp/FCTABLE",
  obs_path   = "/data/harp/OBSTABLE",
  out_path   = "/data/harp/verification"
)

Helper functions

  • make_verif_param()
    • param name
    • param names in files
    • scaling: make_scaling()
    • gross error check bounds
  • make_verif_defaults()
    • groupings: make_verif_groups()
    • error check against obs sd

Batch running

  • new_point_verif_project()
  • DEMO!

New ensemble scores

Threshold weighted CRPS

  • Computes CRPS emphasizing cases the fall within the threshold

  • “Clamps” data outside the threshold of interest

Threshold weighted CRPS

Threshold weighted CRPS

UUI spread skill

\[\mathbb{E}[STDE_{P}] = 2\mathbb{E}[VARE_{P}]\]

UUI spread skill

\[\mathbb{E}[STDE_{P}] = 2\mathbb{E}[VARE_{P}]\]

  • Based on the notion that the unbiased measure of spread is the expected difference between any two ensemble members \[ \small \begin{aligned} \mathbb{E}[(Y_{1}-Y_{2})^{2}] &=\mathbb{E}[Y_{1}-\mu+\mu-Y_{2}^{2}]\\ &=\mathbb{E}[(Y_{1}-\mu)^{2}]-2\mathbb{E}[Y_{1}-\mu]\mathbb{E}[Y_{2}-\mu]+\mathbb{E}[(Y_{2}-\mu)^{2}]\\ &=2\mathbb{E}[(Y-\mu)^{2}]-0\\ &=2Var(Y) \end{aligned} \] The 3rd equality comes from the fact \(Y_{1}\) and \(Y_{2}\) have the same distribution as \(Y\)

Plotting fields

New plot method

  • plot(data, col = )
  • Uses ggplot so easily modifiable
  • Demo!

Wind vectors

  • geom_geowindvec(aes(u = , v = ), skip = )
  • Skipping is important!
  • Demo!

Neighbourhood probabilities

  • ens_prob() for pixel probabilities
  • nbhd_smooth() for neighbourhood probabilities
  • Needs to be done member by member and aggregated
  • Will (hopefully) be built into ens_prob() in the future
  • Need to add ens_pfss() function
  • Demo!

Cross Sections

Cross sections

  • Use transformation = "xsection" + xsection_opts()
  • geom_xs() : model levels
  • geom_xs_pressure() : model levels -> vertical pressure
    • needs:
      • surface pressure

Cross sections

  • geom_xs_height() : model levels -> height ASL
    • needs:
      • surface pressure
      • temperature on model levels
      • specific humidity on model levels
      • representation of topographic height (usually surface geopotential)
  • Demo!

Future plans

  • Just maintenance 😞